package com.study02.zstr;

import java.util.ArrayList;
import java.util.List;

public class Test {


    public static void main(String[] args) {
        String s = "PAYPALISHIRING";
        convert(s, 3);
    }


    public static String convert(String s, int numRows) {
        if (numRows < 2) return s;
        List<StringBuilder> rows = new ArrayList<>();
        for (int i = 0; i < numRows; i++) rows.add(new StringBuilder());
        int i = 0, flag = -1;
        for (char c : s.toCharArray()) {
            rows.get(i).append(c);
            if (i == 0 || i == numRows - 1) flag = -flag;
            i += flag;
        }
        StringBuilder res = new StringBuilder();
        for (StringBuilder row : rows) res.append(row);
        return res.toString();
    }

//    public static String convert(String s, int numRows) {
//        int n = s.length(), r = numRows;
//        if (r == 1 || r >= n) {
//            return s;
//        }
//        StringBuffer[] mat = new StringBuffer[r];
//        for (int i = 0; i < r; ++i) {
//            mat[i] = new StringBuffer();
//        }
//        for (int i = 0, x = 0, t = r * 2 - 2; i < n; ++i) {
//            mat[x].append(s.charAt(i));
//            if (i % t < r - 1) {
//                ++x;
//            } else {
//                --x;
//            }
//        }
//        StringBuffer ans = new StringBuffer();
//        for (StringBuffer row : mat) {
//            ans.append(row);
//        }
//        return ans.toString();
//    }

//    public static String convert(String s, int numRows) {
//        int n = s.length(), r = numRows;
//        if (r == 1 || r >= n) {
//            return s;
//        }
//        int t = r * 2 - 2;
//        int c = (n + t - 1) / t * (r - 1);
//        char[][] mat = new char[r][c];
//        for (int i = 0, x = 0, y = 0; i < n; ++i) {
//            mat[x][y] = s.charAt(i);
//            if (i % t < r - 1) {
//                ++x; // 向下移动
//            } else {
//                --x;
//                ++y; // 向右上移动
//            }
//        }
//        StringBuffer ans = new StringBuffer();
//        for (char[] row : mat) {
//            for (char ch : row) {
//                if (ch != 0) {
//                    ans.append(ch);
//                }
//            }
//        }
//        return ans.toString();
//    }
}
